class_name UISystem
extends BaseSystem

@export var view_manager: ViewManager
@export var popup_text_scene:PackedScene
@onready var popup_text_node2d: Node2D = %PopupText
@onready var tip_node2d: Node2D = %Tip
@onready var up_tip: UpTip = %UpTip
@onready var bottom_tip: BottomTip = %BottomTip
var up_tip_timer:Timer
var cur_bottom_tip_time:float = -1
var bottom_tip_timer:Timer

func init_system():
	view_manager.init_manager()
	if not up_tip_timer:
		up_tip_timer = Timer.new()
		up_tip_timer.one_shot = true
		up_tip_timer.stop()
		up_tip_timer.timeout.connect(func ():
			float_tip("")
			)
		tip_node2d.add_child(up_tip_timer)
	if not bottom_tip_timer:
		bottom_tip_timer = Timer.new()
		bottom_tip_timer.one_shot = true
		bottom_tip_timer.stop()
		bottom_tip_timer.timeout.connect(func ():
			hide_bottom_tip()
			)
		tip_node2d.add_child(bottom_tip_timer)
func popup_text(pos:Vector2,text):
	var temp_popup_text = popup_text_scene.instantiate() as PopupText
	popup_text_node2d.add_child(temp_popup_text)
	temp_popup_text.global_position = pos
	temp_popup_text.init_text(str(text))
func float_tip(tip:String, duration:float = 1):
	if up_tip_timer and not up_tip_timer.paused:
		up_tip_timer.stop()
	if tip == "":
		up_tip.hide_tip()
	if tip != "" and duration > 0:
		up_tip_timer.wait_time = duration
		up_tip_timer.start()
		up_tip.show_tip(tip)
## 显示底边Tip
## duration <= 0 会永久显示直到手动关闭
## 返回打开Tip的时间，可以用于隐藏时指定
func show_bottom_tip(tip:String,duration:float = -1) -> float:
	if bottom_tip_timer and not bottom_tip_timer.paused:
		bottom_tip_timer.stop()
	if duration > 0:
		bottom_tip_timer.wait_time = duration
		bottom_tip_timer.start()
	bottom_tip.show_tip(tip)
	cur_bottom_tip_time = Time.get_ticks_msec()
	return cur_bottom_tip_time
func hide_bottom_tip(tip_time:float = -1):
	if tip_time == -1 or (tip_time != -1 and tip_time == cur_bottom_tip_time):
		bottom_tip.hide_tip()

# TODO 测试使用
func _unhandled_key_input(event: InputEvent) -> void:
	if event is InputEventKey:
		event = event as InputEventKey
		if event.pressed and event.keycode == KEY_J:
			float_tip(str(Time.get_ticks_msec()))
		
